import { getNewCartGoods } from "@/api/cart"

// 购物车
export default {
    namespaced: true,// 开启命名空间
    state() {
        return {
            // 购物车商品列表
            list: []
        }
    },
    getters: {
        // 有效的商品列表
        validList(state) {
            // 有效商品：库存大于0 商品有效标识为 true
            return state.list.filter(goods => goods.stock > 0 && goods.isEffective)
        },
        // 有效的总件数
        validTotal(state, getters) {
            return getters.validList.reduce((p, c) => p + c.count, 0)
        },
        // 有效商品的总金额
        validAmount(state, getters) {
            return getters.validList.reduce((p, c) => p + parseInt(c.nowPrice * 100) * c.count, 0) / 100
        }
    },
    mutations: {
        // 1是否有相同商品 如果有 查询他的数量 累加到pyload上 再保存新位置 原来的商品删除
        // 没有相同商品 保存最新位置
        // 加入购物车
        insertCat(state, payload) {
            const sameIndex = state.list.findIndex(goods => goods.skuId === payload.skuId)
            if (sameIndex > -1) {
                const count = state.list[sameIndex].count
                payload.count += count
                // 删除原来的
                state.list.splice(sameIndex, 1)
            }
            // 追加新的
            state.list.unshift(payload)
        },
        // 修改购物车
        updataCart(state, goods){
            // goods 商品信息：
            const updateGoods = state.list.find(item => item.skuId === goods.skuId)
            // 传什么 修改什么
            for (const key in goods) {
                if (goods[key]!==undefined && goods[key] !== null || goods[key] !== '') {
                    updateGoods[key] = goods[key]
                }
            }
        },
        // 删除购物车商品
        deleteCart(state,skuId){
            const index = state.list.findIndex(item=>item.skuId === skuId)
            state.list.splice(index,1)
        }
    },
    actions: {
        // 加入购物车
        insertCart(ctx, payload) {
            return new Promise((resolve, reject) => {
                if (ctx.rootState.user.profile.token) {
                    // 已登录

                } else {
                    // 未登录
                    ctx.commit('insertCat', payload)
                    resolve()
                }
            })
        },
        // 获取商品列表 
        findCart(ctx){
            return new Promise((resolve, reject) => {
                if (ctx.rootState.user.profile.token) {
                    // 已登录

                } else {
                    // 未登录
                    // 同时发送请求（有几个商品发几个请求 ）等所有请求成功 一并修改本地数据
                    // Promise.all(promise数组).then(data=>{})
                    const promiseArr = ctx.state.list.map(v=>{
                        return getNewCartGoods(v.skuId)
                    })
                    Promise.all(promiseArr).then(results=>{
                        results.forEach((data,i)=>{
                            ctx.commit('updateCart',{skuId:ctx.state.list[i].skuId,...data.result})
                        })
                        resolve()
                    })
                }
            })
        },
        // 删除购物车商品
        deleteCart(ctx,payload){
            // 单条删除 
            return new Promise((resolve, reject) => {
                if (ctx.rootState.user.profile.token) {
                    // 已登录

                } else {
                    // 未登录
                    ctx.commit('deleteCart',payload)
                    resolve()
                }
            })
        }
    }
}